function bubbleSort(arr){
    for(var i=0;i<arr.length;i++){
        for(var j=1;j<arr.length-i-1;j++){
            //长度需要减一,
            //这里要注意：必须是j-1  不能使j和j+1这样会出错，会交换内容出错。
            if(arr[j-1]>arr[j]){
                var tmp=arr[j];
                arr[j]=arr[j-1];
                arr[j-1]=tmp;
            }
        }
    }
    console.log(arr);
}
var a=[1,2,2583,43,2,3,422,3,2342];
//bubbleSort(a);
//bubble的第一种优化方法
//立一个flag，结束一层循环后判断是否有没有进行交换没有说明已经是有序的了，就可以输出了。
function promteBubbleSort(arr){
    for(var i=0;i<arr.length;i++){
         var exchangeFlag=false;
        for(var j=1;j<arr.length-i-1;j++){
            if(arr[j-1]>arr[j]){
                exchangeFlag=true;
                var tmp=arr[j-1];
                arr[j-1]=arr[j];
                arr[j]=tmp;
            }
        }
        if(!exchangeFlag){
            break;
        }
        console.log(arr);
    }
}
//promteBubbleSort(a);


//第三种冒泡的改进方式
//正反向同时比较
function promteBulbbleSort2(arr){
    var low=0,high=arr.length-1;
    while(low<high){
        //从前向后判断，前面要比后面小
        for(var i=low;i<high;++i){
            if(arr[i]>arr[i+1]){
                var tmp=arr[i+1];
                arr[i+1]=arr[i];
                arr[i]=tmp;
            }
        }
        --high;
        //从后向前判断，后面要比前面大
        for(var j=high;j>low;--j){
            if(arr[j]<arr[j-1]){
                var tmp=arr[j-1];
                arr[j-1]=arr[j];
                arr[j]=tmp;
            }
        }
        ++low;
    }
}
promteBulbbleSort2(a)
console.log(a);